
//
//  NSDate+Extension.swift
//  上海微博
//
//  Created by mac on 16/5/18.
//  Copyright © 2016年 itcast. All rights reserved.
//

import Foundation

//DateFormatter的单例
private let cz_DateFormatter=NSDateFormatter()
//NSCalendar的单例
private let cz_calender = NSCalendar.currentCalendar()
extension NSDate {

    class func cz_sinaDate(creatDate: String?)->NSDate? {
        guard let creatDate=creatDate else {
            return nil
        }
        
        cz_DateFormatter.dateFormat="EEE MMM dd HH:mm:ss zzz yyyy"
        //注意：一定要设置区域，如果不设置，模拟器工作正常，真机无法正常计算
        cz_DateFormatter.locale=NSLocale(localeIdentifier: "en")
        
        //转换结果
        return cz_DateFormatter.dateFromString(creatDate)
    }
    /** 返回日期格式字符串
     
     刚刚(一分钟内)
     X分钟前(一小时内)
     X小时前(当天)
     昨天 HH:mm(昨天)
     MM-dd HH:mm(一年内)
     yyyy-MM-dd HH:mm(更早期)
     */
    
    var cz_dateDescription: String {
        
        // 1. 判断是否是今天
        if cz_calender.isDateInToday(self) {
            
            // 计算当前系统时间和 self 之间的时间差值
            let delta = Int(NSDate().timeIntervalSinceDate(self))
            
            if delta < 60 {
                return "刚刚"
            }
            if delta < 60 * 60 {
                return "\(delta / 60) 分钟前"
            }
            
            return "\(delta / 3600) 小时前"
        }
        
        // 2. 判断是否是昨天
        /**
         1> 在 iOS 开发中，如果设计日期转换，首先考虑 calendar
         2> components方法，可以指定任意的日期组件，查询日期
         Swift 写法 [.Year, .Month, .Day]
         OC 写法 NSCalendarUnitYear | NSCalendarUnitMonth
         
         coms = cz_sharedCalendar.components([.Year, .Month, .Day], fromDate: self)
         */
        var format = " HH:mm"
        if cz_calender.isDateInYesterday(self) {
            format = "昨天" + format
        } else {
            format = "MM-dd" + format
            
            let year = cz_calender.component(.Year, fromDate: self)
            let thisYear = cz_calender.component(.Year, fromDate: NSDate())
            
            if year != thisYear {
                format = "yyyy-" + format
            }
        }
        
        // 转换日期
        cz_DateFormatter.dateFormat = format
        cz_DateFormatter.locale = NSLocale(localeIdentifier: "en")
        
        return cz_DateFormatter.stringFromDate(self)
    }
}